package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * JDK8之后java推出了一个新特性:lambda表达式
 *
 * lambda表达式可以用更简洁的语法创建匿名内部类.
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 * 需要注意:只要当实现的接口中仅有一个抽象方法时,才可以使用lambda表达式
 *
 * 使用lambda表达式可以更突出方法的实现逻辑,而不再赘述实现接口的语法上
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //使用匿名内部类形式创建Comparator
        Comparator<String> c1 = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        };
        //lambda表达式写法
        Comparator<String> c2 = (String o1, String o2)->{
                return o1.length()-o2.length();
        };

        //lambda表达式中,参数列表中的参数类型可以忽略不写
        Comparator<String> c3 = (o1, o2)->{
            return o1.length()-o2.length();
        };

        /*
            如果lambda表达式只有一句代码,那么方法体的"{}"可以忽略不写,同时如果该句代码
            含有return关键字,那么也要一同忽略.
         */
        Comparator<String> c4 = (o1, o2)->o1.length()-o2.length();

        List<String> list = new ArrayList<>();
        list.add("王克晶");
        list.add("传奇");
        list.add("伟超老师");
//        Collections.sort(list,(o1, o2)->o1.length()-o2.length());
        /*
            JDK8之后List集合自身提供了sort方法,可以根据给定的比较器对自身元素进行比较后排序
            并且Collections中的sort方法逻辑也变为了调用list的sort实现了.
         */
        list.sort((o1, o2)->o1.length()-o2.length());


    }
}






